//! 数据源插件完整演示程序
//!
//! 展示基于Rust+Arrow Flight SQL+微内核架构的数据网关系统中的数据源插件功能：
//! 1. 数据源管理器
//! 2. 内存数据源插件
//! 3. 文件系统数据源插件
//! 4. HTTP API数据源插件
//! 5. 统一查询接口

use std::collections::HashMap;
use data_gateway_kernel::{DataGatewayKernel, Query};
use data_gateway_kernel::query::QueryParameter;
use data_gateway_data_sources::*;
use serde_json::json;

#[tokio::main]
async fn main() -> anyhow::Result<()> {
    // 初始化日志
    tracing_subscriber::fmt()
        .with_max_level(tracing::Level::INFO)
        .init();

    println!("🚀 启动数据源插件完整演示程序");
    println!("📋 基于magic-api设计理念，展示多数据源统一接入能力");
    println!("");

    // ========== 第一部分：微内核系统初始化 ==========
    println!("🏗️  第一部分：微内核系统初始化");
    println!("━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━");
    
    let kernel = DataGatewayKernel::new().await?;
    println!("✅ 微内核系统初始化完成");

    // ========== 第二部分：数据源管理器演示 ==========
    println!("\n📊 第二部分：数据源管理器演示");
    println!("━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━");
    
    let mut data_source_manager = DataSourceManager::new();
    println!("✅ 数据源管理器创建成功");

    // ========== 第三部分：初始化默认数据源 ==========
    println!("\n📊 第三部分：初始化默认数据源");
    println!("━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━");

    // 使用数据源管理器的默认初始化功能
    data_source_manager.initialize_default_sources().await?;

    // ========== 第四部分：连接所有数据源 ==========
    println!("\n🔗 第四部分：连接所有数据源");
    println!("━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━");

    match data_source_manager.connect_all().await {
        Ok(_) => println!("✅ 所有数据源连接成功"),
        Err(e) => println!("⚠️ 部分数据源连接失败: {}", e),
    }

    // ========== 第五部分：执行查询演示 ==========
    println!("\n🔍 第五部分：执行查询演示");
    println!("━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━");

    // 对内存数据源执行查询
    println!("📊 对内存数据源执行查询...");
    let query = DataSourceQuery {
        id: "memory_query_1".to_string(),
        content: "SELECT * FROM users".to_string(),
        parameters: HashMap::new(),
    };

    match data_source_manager.execute_query("memory", query).await {
        Ok(result) => {
            println!("✅ 查询成功:");
            println!("  - 执行时间: {:.2}ms", result.stats.execution_time_ms);
            println!("  - 处理行数: {}", result.stats.rows_processed);
            println!("  - 数据预览: {}", result.data);
        }
        Err(e) => println!("❌ 查询失败: {}", e),
    }

    let sources = data_source_manager.list_sources();
    println!("✅ 已注册的数据源数量: {}", sources.len());
    for source in &sources {
        println!("  📌 {}", source);
    }

    // ========== 第六部分：统一查询接口演示 ==========
    println!("\n🔗 第六部分：统一查询接口演示");
    println!("━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━");

    // 创建针对不同数据源的查询
    let queries = vec![
        ("内存数据源查询", Query::sql("SELECT * FROM users LIMIT 5".to_string())),
        ("文件系统查询", Query::sql("SELECT * FROM data.csv".to_string())),
        ("HTTP API查询", Query::sql("SELECT * FROM /api/users".to_string())),
    ];

    for (name, query) in queries {
        println!("📊 创建{}: {}", name, query.id);
        println!("   查询类型: {:?}", query.query_type);
        println!("   查询内容: {}", query.content);
        println!("");
    }

    // ========== 第七部分：系统总结 ==========
    println!("🎯 第七部分：系统总结");
    println!("━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━");

    println!("✨ 数据源插件演示完成！");
    println!("");
    println!("🏆 已注册的数据源:");
    for source in &sources {
        if source.contains("memory") {
            println!("  ✅ {} - 高性能内存存储，支持SQL查询", source);
        } else if source.contains("filesystem") {
            println!("  ✅ {} - 支持CSV、JSON、文本文件读取", source);
        } else if source.contains("http") {
            println!("  ✅ {} - RESTful API数据源集成", source);
        } else if source.contains("postgresql") {
            println!("  ✅ {} - 关系型数据库，支持复杂查询和事务", source);
        } else if source.contains("redis") {
            println!("  ✅ {} - NoSQL键值存储，支持缓存和实时数据", source);
        } else if source.contains("sqlite") {
            println!("  ✅ {} - 轻量级数据库，支持嵌入式应用", source);
        } else {
            println!("  ✅ {} - 其他数据源", source);
        }
    }
    println!("");
    println!("🚀 技术优势:");
    println!("  ⚡ 统一接口 - 所有数据源通过统一API访问");
    println!("  🔒 类型安全 - Rust编译时保证数据类型安全");
    println!("  🌊 异步处理 - 基于Tokio的高性能异步IO");
    println!("  📊 Arrow集成 - 零拷贝数据处理和列式存储");
    println!("  🔌 插件架构 - 支持动态加载和热插拔");

    println!("\n🎉 数据源插件演示程序成功完成！");
    println!("📚 更多信息请参考 plan1.md 中的详细技术方案");
    
    Ok(())
}
